home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1997 December / PC Pro December 1997 CD-Rom coverdisc.iso / symantec / dbAnywh / JAVA.BIN / CLASSES.ZIP / sun / tools / tree / DoStatement.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-12-14  |  3.0 KB  |  75 lines

  1. package sun.tools.tree;
  2.  
  3. import java.io.PrintStream;
  4. import java.util.Hashtable;
  5. import sun.tools.asm.Assembler;
  6. import sun.tools.asm.Label;
  7. import sun.tools.java.Environment;
  8. import sun.tools.java.Type;
  9.  
  10. public class DoStatement extends Statement {
  11.    Statement body;
  12.    Expression cond;
  13.  
  14.    public DoStatement(int var1, Statement var2, Expression var3) {
  15.       super(94, var1);
  16.       this.body = var2;
  17.       this.cond = var3;
  18.    }
  19.  
  20.    long check(Environment var1, Context var2, long var3, Hashtable var5) {
  21.       CheckContext var6 = new CheckContext(var2, this);
  22.       var3 = this.body.check(var1, var6, ((Statement)this).reach(var1, var3), var5);
  23.       ConditionVars var7 = this.cond.checkCondition(var1, var6, var3 & var6.vsContinue, var5);
  24.       this.cond = ((Node)this).convert(var1, var6, Type.tBoolean, this.cond);
  25.       var3 = var6.vsBreak & var7.vsFalse;
  26.       return var2.removeAdditionalVars(var3);
  27.    }
  28.  
  29.    public Statement inline(Environment var1, Context var2) {
  30.       var2 = new Context(var2, this);
  31.       if (this.body != null) {
  32.          this.body = this.body.inline(var1, var2);
  33.       }
  34.  
  35.       this.cond = this.cond.inlineValue(var1, var2);
  36.       return this;
  37.    }
  38.  
  39.    public Statement copyInline(Context var1, boolean var2) {
  40.       DoStatement var3 = (DoStatement)((Node)this).clone();
  41.       var3.cond = this.cond.copyInline(var1);
  42.       if (this.body != null) {
  43.          var3.body = this.body.copyInline(var1, var2);
  44.       }
  45.  
  46.       return var3;
  47.    }
  48.  
  49.    public int costInline(int var1) {
  50.       return 1 + this.cond.costInline(var1) + (this.body != null ? this.body.costInline(var1) : 0);
  51.    }
  52.  
  53.    public void code(Environment var1, Context var2, Assembler var3) {
  54.       Label var4 = new Label();
  55.       var3.add(var4);
  56.       CodeContext var5 = new CodeContext(var2, this);
  57.       if (this.body != null) {
  58.          this.body.code(var1, var5, var3);
  59.       }
  60.  
  61.       var3.add(var5.contLabel);
  62.       this.cond.codeBranch(var1, var5, var3, var4, true);
  63.       var3.add(var5.breakLabel);
  64.    }
  65.  
  66.    public void print(PrintStream var1, int var2) {
  67.       super.print(var1, var2);
  68.       var1.print("do ");
  69.       this.body.print(var1, var2);
  70.       var1.print(" while ");
  71.       this.cond.print(var1);
  72.       var1.print(";");
  73.    }
  74. }
  75.